package com.example.phoneshop.entity;
/*
 * Create by zw ON 2018/7/9 10:44
 */

import java.math.BigDecimal;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class Cart {
    private Map<Integer, CartItem> map = new LinkedHashMap<Integer, CartItem>();
    private BigDecimal total = new BigDecimal(0);  //总价
    /**
     * 商品状态
     */
    private int statuc;

    /**
     * 添加时间
     * @return
     */
    private String createTime;

    /**
     * 更新时间
     * @return
     */
    private String updataTime;


    public BigDecimal getTotal() {
        return total;
    }

    /*
     * 获得购物项集合/
     * @return
     */
    public Collection<CartItem> getCartItems() {
        return map.values();
    }

    public void add(CartItem cartItem) {
        /*
         * 先找到该数是否存在，如果存在，更新数量，不存在，添加进去购物车，同时更新总价
         */
        int id = cartItem.getGoods().getId();
    /*
	 * 获得购物项集合
	 * @return
	 */
        if (map.containsKey(id)) {
            //如果购物车中包含该购物项，更新数量
            //购物车中原来的购物项
            CartItem _cartItem = map.get(id);
            //更新购物车中购物项的数量，不用担心小计，自动更新
            _cartItem.setCount(_cartItem.getCount() + cartItem.getCount());
        } else {
            map.put(id, cartItem);
        }
        //更新购物车总价
        total = total.add(cartItem.getSubtotal());

    }

    /**
     * 从购物车中移除购物项
     *
     * @param id 商品id
     */
    public void remove(Integer id) {
        /*
         * 将购物项移除，更新总价
         */
        CartItem cartItem = map.remove(id);
        total = total.subtract(cartItem.getSubtotal());
    }

    /***
     * 清空购物车
     */
    public void clear() {
        map.clear();
        total = new BigDecimal(0);
    }

    public void setStatuc(int statuc) {
        this.statuc = statuc;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public void setUpdataTime(String updataTime) {
        this.updataTime = updataTime;
    }

    public int getStatuc() {
        return statuc;
    }

    public String getCreateTime() {
        return createTime;
    }

    public String getUpdataTime() {
        return updataTime;
    }
}
